public class test {
    // 1、java的三层架构分别是什么？每层架构的作用是什么？
    //    {
    //        控制层（Controller）：接收前端请求，调用业务逻辑层处理，返回响应（如SpringMVC的@Controller）
    //        业务逻辑层（Service）：处理业务规则、事务管理、数据校验（如@Service注解的类）
    //        持久化层（DAO/Repository）：负责数据库操作（如MyBatis的Mapper接口）
    //        核心作用：解耦、分层维护、复用性高。
    //    }
    //2、List集合中删除元素的方法是什么？List集合中怎么对集合中的元素进行遍历都有哪些方式？
    //    [abcd,abc,ab,d]
    //    {
    //        list.remove(index); // 按索引删除（如 list.remove(0)）
    //        list.remove(Object); // 按元素值删除（如 list.remove("abc")）
    //        1. for-each循环 -> for (String s : list) { System.out.println(s); }
    //        2. for循环+索引 -> for (int i=0; i<list.size(); i++) {
    //                           System.out.println(list.get(i));
    //                       }
    //        3. Iterator迭代器 -> Iterator<String> it = list.iterator();
    //                          while (it.hasNext()) {
    //                              if ("ab".equals(it.next())) it.remove(); // 安全删除
    //                          }
    //    }
    //3、mybatis中crud的标签分别是什么？resultType和resultMap有什么进行区别？
    //    {
    //        <select>：查询
    //        <insert>：插入
    //        <update>：更新
    //        <delete>：删除
    //        resultType:                  |  resultMap
    //        映射方式: 自动映射               | 手动定义映射关系
    //        复杂度：  复杂度简单(适合单表)     | 复杂（适合多表关联、字段别名不一致）
    //        使用场景: resultType="User"    | <resultMap id="userMap">
    //    }
    //4、为什么用mybatis,不用jdbc，mybatis的优势是什么？
    //    {
    //        MyBatis优势：
    //        资源管理规范化:
    //        1.通过SqlSession自动管理连接生命周期
    //        2.集成连接池,实现资源复用
    //        3.无需手动关闭资源(由框架通过代理模式自动处理)
    //        SQL管理的规范化:
    //        1.XML/注解声明式配置(可读性强)
    //        2.自动参数映射
    //        3.内置防SQL注入机制
    //        结果集映射规范化:JDBC需要手动映射字段,MyBatis支持自动对象映射
    //        事务管理的规范化:JDBC需要手动调用commit()/rollback(),
    //                      mybatis与Spring集成支持声明式事务
    //    }
    //5、@RestController这个组合注解，注解的作用？
    //    {
    //        组合@Controller + @ResponseBody
    //        将返回值直接序列化为JSON/XML（无需@ResponseBody）
    //        也就是直接获取值,而不获取页面
    //        用于RESTful API开发
    //        @RestController
    //        public class UserController {
    //            @GetMapping("/user")
    //            public User getUser() {
    //                return new User("Alice", 25); // 自动转JSON
    //            }
    //        }
    //    }
    //6、该项目中是如何实现分页的，pageHelper如何使用？
    //    {
    //        添加依赖:
    //        <dependency>
    //            <groupId>com.github.pagehelper</groupId>
    //            <artifactId>pagehelper-spring-boot-starter</artifactId>
    //        </dependency>
    //        在Service中调用:
    //        PageHelper.startPage(pageNum, pageSize); // 页码, 每页条数
    //        List<User> list = userMapper.selectAll(); // 后续查询自动分页
    //        PageInfo<User> pageInfo = new PageInfo<>(list); // 封装分页数据
    //        分页原理：通过AOP拦截查询SQL，自动添加LIMIT语句。
    //    }
    //7、class 是关键字吗？String 是关键字吗？关键字的特征是啥？
    //    {
    //        class：是关键字（用于定义类）
    //        String：不是关键字（是Java内置类）
    //        关键字特征：
    //        1.全部小写（如 int, for）
    //        2.不能用作标识符（变量名/类名）
    //        3.有特殊语法含义（共约50个，如 public, static）
    //    }
    //8、for循环和while循环有啥区别，通常下在遍历十次的情况下，选择那种循环比较好？
    //    {
    //                         for循环                      while循环
    //        适用场景:    明确循环次数(如数组遍历)     |     条件驱动(如文件读取)
    //        结构:       for(初始化;条件;步进)       |     while(条件){...}
    //        遍历10次推荐使用for循环,代码紧凑,次数明确;while需要额外定义计数器
    //    }
    //9、什么是重载方法？什么是重写方法？重载和重写有啥区别？
    //    {
    //                    重载                                       重写
    //        定义: 同一类中，方法名相同、参数不同             | 子类重写父类方法（方法签名相同）
    //        作用: 扩展方法功能如print(int), print(String) | 实现多态（如父类run()被子类重写）
    //        返回: 可不同                                | 必须相同
    //        权限: 可不同                                | 不能更严格（如父类protected，子类不能private）
    //    }
    //10、mybatis中在select标签中为啥where条件要加上标签改成<where></where>标签？
    //    这样的好处的是什么？
    //    {
    //        解决SQL拼接问题（如避免WHERE AND错误）
    //        自动处理前缀AND/OR
    //        示例:
    //        <select id="findUser">
    //          SELECT * FROM user
    //          <where>
    //            <if test="name != null">AND name=#{name}</if>
    //            <if test="age != null">AND age=#{age}</if>
    //          </where>
    //        </select>
    //        好处：
    //        若所有条件为空，自动忽略WHERE关键字
    //        若第一个条件有AND，自动删除
    //    }
    //11、int 和 Integer  哪个是包装类？他们的默认值分别是什么？
    //    {
    //        Integer为包装类,int为基本数据类型,Integer为引用类型.
    //        int默认值为0;Integer默认值为null
    //    }
    //    在日常开发中为啥建议用Integer?  Integer相对于int的好处是什么？
    //    {
    //        int容易导致空指针,如请求传输的数据中没有某个数据,应该为空,而int无法存储null
    //        Integer可以为空,支持null,泛型,方法(如Integer.parseInt())
    //    }
    //12、String 类可以被其他子类继承吗？为什么？
    //   final
    //    {
    //        不能,String类被final修饰：
    //            public final class String { ... }
    //        final类禁止被继承（安全性和不可变性要求）
    //    }
    //13、面向对象中构造器分为几种？构造器的作用是什么？
    //        对象的创建   属性的赋值
    //    {
    //        分类：
    //        无参构造器：默认创建对象（若未定义，编译器自动生成）
    //        有参构造器：创建对象并初始化属性
    //        作用：
    //        创建对象实例（new ClassName()）
    //        初始化对象属性（如 new User("Alice", 25)）
    //    }
    //14、说说你们这几天在项目中所遇到的哪些异常？
    //    {
    //        NullPointerException：调用了null对象的方法
    //        SQLException：数据库操作错误（如连接失败）
    //        ArrayIndexOutOfBoundsException：数组越界
    //        ClassCastException：类型强制转换失败
    //        IllegalArgumentException：方法参数不合法
    //    }
    //15、简单描述一下你编写接口的流程吧，从前端浏览器发送请求开始
    //    {
    //        前端发送HTTP请求（如 GET /api/users）
    //        后端Controller接收请求（@GetMapping("/api/users")）
    //        Service层处理业务逻辑（如查询数据库）
    //        DAO层执行SQL操作（MyBatis Mapper）
    //        Service返回数据给Controller
    //        Controller将数据转为JSON响应前端
    //    }
    //16、controller层都有哪些作用？
    //    {
    //        路由映射：@GetMapping/@PostMapping绑定URL
    //        参数解析：获取请求参数（@RequestParam, @PathVariable）
    //        数据校验：验证参数合法性（如@Valid）
    //        响应封装：返回JSON/XML数据（或视图跳转）
    //    }
    //17、crud的sql语句，如果批量删除用到sql语句中的哪个关键字？
    //    {
    //        关键字:IN
    //        DELETE FROM user WHERE id IN (1, 2, 3);
    //        MyBatis实现：
    //        <delete id="batchDelete">
    //          DELETE FROM user WHERE id IN
    //          <foreach item="id" collection="ids" open="(" separator="," close=")">
    //            #{id}
    //          </foreach>
    //        </delete>
    //    }
    //18、什么是继承？继承所用到的关键字是什么？继承的好处是什么？
    //    {
    //        定义：子类（派生类）继承父类（基类）的属性和方法。
    //        关键字：extends
    //        class Animal { }  // 父类
    //        class Dog extends Animal { } // 子类
    //        代码复用：子类复用父类方法
    //        多态支持：父类引用指向子类对象（Animal a = new Dog()）
    //        扩展性：子类可新增或重写方法
    //    }
    //19、接口能new吗？接口里面都是抽象方法，抽象接口没有代码体，只能new当前接口的实现类
    //    {
    //        不能直接new接口
    //        因为接口只有抽象方法（无方法体）
    //        必须通过实现类实例化:
    //        interface Flyable { void fly(); }
    //        class Bird implements Flyable {
    //            public void fly() { System.out.println("Flying"); }
    //        }
    //
    //        // 正确用法
    //        Flyable obj = new Bird();
    //    }
    //20、什么是多态？
    //    一种行为具有多种不同的表现形态，典型的案例就是List<Integer> lists = new ArrayList<>();
    //    {
    //        定义：同一操作作用于不同对象，产生不同的行为。
    //        核心表现：
    //        父类引用指向子类对象
    //        运行时绑定实际类型的方法
    //        List<Integer> list = new ArrayList<>();  // 多态
    //        list = new LinkedList<>();               // 同一接口不同实现
    //        优势：
    //        代码扩展性强
    //        降低模块耦合度
    //    }
}
